/**
 * 检测消息是否包含Markdown格式
 * @param {string} text 需要检测的文本
 * @returns {boolean} 是否包含Markdown格式
 */
export const hasMarkdownFormat = (text) => {
  if (!text) return false;

  // 检测常见Markdown语法
  const markdownPatterns = [
    /^#+\s+.+$/m, // 标题 (# 标题)
    /\*\*.+?\*\*/, // 加粗 (**文本**)
    /\*.+?\*/, // 斜体 (*文本*)
    /^>\s+.+$/m, // 引用 (> 引用)
    /^-\s+.+$/m, // 无序列表 (- 项目)
    /^[0-9]+\.\s+.+$/m, // 有序列表 (1. 项目)
    /\[.+?\]\(.+?\)/, // 链接 ([文本](链接))
    /!\[.+?\]\(.+?\)/, // 图片 (![alt](url))
    /^```[\s\S]+?```$/m, // 代码块 (```代码```)
    /`[^`]+?`/, // 行内代码 (`代码`)
    /^\|(.+\|)+$/m, // 表格 (|表格|)
    /^-{3,}$/m, // 分割线 (---)
    /\$\$.+?\$\$/, // 行间数学公式 ($$公式$$)
    /\$.+?\$/, // 行内数学公式 ($公式$)
    // 添加识别特殊标记的模式
    /^#{1,6}.+$/m, // 检测可能没有空格的标题
    /^\.\s*\S+/m, // 点开头的可能列表项
  ];

  return markdownPatterns.some((pattern) => pattern.test(text));
};

/**
 * 检测是否包含代码块
 * @param {string} text 需要检测的文本
 * @returns {boolean} 是否包含代码块
 */
export const hasCodeBlock = (text) => {
  if (!text) return false;

  // 匹配代码块
  const codeBlockPattern = /^```[\s\S]+?```$/m;
  return codeBlockPattern.test(text);
};

/**
 * 检测是否包含表格
 * @param {string} text 需要检测的文本
 * @returns {boolean} 是否包含表格
 */
export const hasTable = (text) => {
  if (!text) return false;

  // 匹配Markdown表格
  const tablePattern = /^\|(.+\|)+$/m;
  return tablePattern.test(text);
};

/**
 * 检测是否包含数学公式
 * @param {string} text 需要检测的文本
 * @returns {boolean} 是否包含数学公式
 */
export const hasMathFormula = (text) => {
  if (!text) return false;

  // 匹配数学公式
  const mathPattern = /\$\$.+?\$\$|\$.+?\$/;
  return mathPattern.test(text);
};

/**
 * 分析消息内容，确定应该如何渲染
 * @param {string} text 消息内容
 * @returns {object} 渲染配置信息
 */
export const analyzeMessageContent = (text) => {
  if (!text) {
    return {
      useMarkdown: false,
      hasCode: false,
      hasTable: false,
      hasMath: false,
    };
  }

  // 简单启发式检测，如果包含特定的模式，强制使用Markdown
  const forceMarkdownPatterns = [
    /\*\*/,         // 加粗
    /^>/m,          // 引用
    /^-\s/m,        // 无序列表
    /^#+\s/m,       // 标题
    /\|\|/,         // 可能的表格
    /```/,          // 代码块
    /\.([\S])/m,    // 点开头可能是列表
    /^#{1,6}/m      // 任何形式的标题标记
  ];
  
  const forceMarkdown = forceMarkdownPatterns.some(pattern => pattern.test(text));

  const result = {
    useMarkdown: forceMarkdown || hasMarkdownFormat(text),
    hasCode: hasCodeBlock(text),
    hasTable: hasTable(text),
    hasMath: hasMathFormula(text),
  };

  // 如果有代码块、表格或数学公式，就强制使用Markdown渲染
  if (result.hasCode || result.hasTable || result.hasMath) {
    result.useMarkdown = true;
  }
  
  // 如果文本中包含多行并且有可能是列表项，也使用Markdown
  if (text.includes('\n') && (
    text.includes('- ') || 
    text.includes('* ') || 
    /\d+\.\s/.test(text) ||
    /\.\s*\S+/.test(text)
  )) {
    result.useMarkdown = true;
  }

  return result;
};
